import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '@/assets/styles/base.css'
import '@/assets/styles/el-result.css'
//引入iconfont
import "./assets/iconfont/iconfont.css"
//引入subMenu组件
import qfSubMenu from "qf-sub-menu"

//导入nprogress进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// Vue.config.productionTip = false;
Vue.use(ElementUI);
Vue.use(qfSubMenu)
//路由前置钩子(导航守卫)
router.beforeEach((to, from, next) => {
  NProgress.start()
  let token = localStorage.getItem('stu-token') || null;
  // console.log(to);
  // 如果已经登录，那就不拦截
  if (token) {
    if(store.state.menuList.length == 0){//如果state中的sideMenu长度为0 说明没有 需要重新获取
      //如果没有,那么开始获取
      store.dispatch('FETCH_MENULIST')
      .then(()=>{
        next({path : to.path})//这里要注意, next里面要传参数即要进入的页面的路由信息，因为next传参数后，当前要进入的路由会被废止，转而进入参数对应的路由，虽然是同一个路由，这么做主要是为了确保addRoutes生效了。})
    })
  }else{
    next()
  }
}else{if (to.path === '/login') {
  // 如果没有登录，但访问的login，那就不拦截,让你访问
  next()
}else {
  // 如果没有登录，但你访问其他需要登录的页面，那我让用户跳到登录页面去
  next({path: '/login'})
}}
})

//路由后置钩子处理面包屑
router.afterEach((to,from)=>{
  NProgress.done()
   // console.log(to);
  let crumblist = to. matched.slice(1)
  store.commit("SET_CRUBMS",crumblist)
  // store.commit('permission/SET_CUR', payload)
})

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount("#app");
